/*
 *  Copyright (c) 2004, The University Scheduler Project
 *  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *  - Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  - Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  - Neither the name of the University Scheduler Project nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
 *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
 *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
 *  CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
 *  LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
 *  ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 *  POSSIBILITY OF SUCH DAMAGE.
 *
 */

package edu.rpi.scheduler.ui.widgets;

import edu.rpi.scheduler.schedb.SectionDescriptor;
import edu.rpi.scheduler.schedb.spec.ClassPeriod;
import edu.rpi.scheduler.schedb.spec.Section;
import edu.rpi.scheduler.schedb.spec.DailyTimePeriod;
import edu.rpi.scheduler.ui.SchedulingSession;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

class VisualSection {
    private VisualUnique visualUnique = null;
    private final SchedulingSession session;
    private final SectionDescriptor section;
    private final int[] halfHours = new int[7];
    private final List<List<DailyTimePeriod>> periods = new ArrayList<List<DailyTimePeriod>>();

    public VisualSection(SchedulingSession session, SectionDescriptor section) {
        assert session != null;
        this.session = session;
        this.section = section;
        initPeriods();
    }

    private void initPeriods() {
        Collection<ClassPeriod> periods = section.getActualSection().getPeriods();

        for (int day = 0; day < 7; day++) {
            List<DailyTimePeriod> periodList = new ArrayList<DailyTimePeriod>();

            for (ClassPeriod classPeriod : periods) {
                DailyTimePeriod period = classPeriod.getTimePeriod();

                if (!period.isOnDay(day)) continue;

                periodList.add(new DailyTimePeriod(day, period));
            }
            this.periods.add(periodList);
        }
    }

    public VisualUnique getVisualUnique() { return visualUnique; }

    public void setVisualUnique(VisualUnique visualUnique) {
        this.visualUnique = visualUnique;
    }

    public Section getSection() {
        return section.getActualSection();
    }

    public SectionDescriptor getSectionDesc() { return section; }

    public List<DailyTimePeriod> getPeriods(int day) {
        return periods.get(day);
    }

    public int getHalfHours(int day) {
        return halfHours[day];
    }
}
